Kubernetes Containerd ctr、crictl、nerdctl 您所在的位置:网站首页 kubectl 镜像 管理 Kubernetes Containerd ctr、crictl、nerdctl

Kubernetes Containerd ctr、crictl、nerdctl

2023-11-24 03:56| 来源: 网络整理| 查看: 265

一、概述

作为接替 Docker 运行时的 Containerd 在早在 Kubernetes1.7 时就能直接与 Kubelet 集成使用,只是大部分时候我们因熟悉 Docker,在部署集群时采用了默认的 dockershim。在V1.24起的版本的 kubelet 就彻底移除了dockershim,改为默认使用Containerd了,当然也使用 cri-dockerd 适配器来将 Docker Engine 与 Kubernetes 集成。可以参考官方文档:

https://kubernetes.io/zh-cn/docs/setup/production-environment/container-runtimes/#docker

二、Containerd 常见命令操作

更换 Containerd 后,以往我们常用的 docker 命令也不再使用,取而代之的分别是 crictl 和 ctr 两个命令客户端。

crictl 是遵循 CRI 接口规范的一个命令行工具,通常用它来检查和管理kubelet节点上的容器运行时和镜像。

ctr 是 containerd 的一个客户端工具。

ctr -v 输出的是 containerd 的版本,crictl -v 输出的是当前 k8s 的版本,从结果显而易见你可以认为 crictl 是用于 k8s 的。

一般来说你某个主机安装了 k8s 后,命令行才会有 crictl 命令。而 ctr 是跟 k8s 无关的,你主机安装了 containerd 服务后就可以操作 ctr 命令。

使用crictl命令之前,需要先配置/etc/crictl.yaml如下:

runtime-endpoint: unix:///run/containerd/containerd.sock image-endpoint: unix:///run/containerd/containerd.sock timeout: 10 debug: false

或者使用命令:

crictl config runtime-endpoint unix:///run/containerd/containerd.sock crictl config image-endpoint unix:///run/containerd/containerd.sock 命令 docker ctr(containerd) crictl(kubernetes) 查看运行的容器 docker ps ctr task ls/ctr container ls crictl ps 查看镜像 docker images ctr image ls crictl images 查看容器日志 docker logs 无 crictl logs 查看容器数据信息 docker inspect ctr container info crictl inspect 查看容器资源 docker stats 无 crictl stats 启动/关闭已有的容器 docker start/stop ctr task start/kill crictl start/stop 运行一个新的容器 docker run ctr run 无(最小单元为 pod) 打标签 docker tag ctr image tag 无 创建一个新的容器 docker create ctr container create crictl create 导入镜像 docker load ctr image import 无 导出镜像 docker save ctr image export 无 删除容器 docker rm ctr container rm crictl rm 删除镜像 docker rmi ctr image rm crictl rmi 拉取镜像 docker pull ctr image pull crictl pull 推送镜像 docker push ctr image push 无 登录或在容器内部执行命令 docker exec 无 crictl exec 清空不用的容器 docker image prune 无 crictl rmi --prune 由于 Containerd 也有 namespaces 的概念,对于上层编排系统的支持,ctr 客户端 主要区分了 3 个命名空间分别是k8s.io、moby和default,以上我们用crictl操作的均在k8s.io命名空间,使用ctr 看镜像列表就需要加上-n 参数。crictl 是只有一个k8s.io命名空间,但是没有-n 参数。

【温馨提示】ctr images pull 拉取的镜像默认放在default,而 crictl pull 和 kubelet 默认拉取的镜像都在 k8s.io 命名空间下。所以通过ctr导入镜像的时候特别注意一点,最好指定命名空间。

注意-n不能放在命令最后面,下面几行查看的镜像是一样的

ctr -n=k8s.io image ls ctr -n k8s.io image ls

crictl 没有-n参数,操作都在k8s.io命名空间下。

crictl image ls crictl images

crictl image list = ctr -n=k8s.io image list crictl image ls = ctr -n=k8s.io image ls crictl images = ctr -n=k8s.io image list crictl images = ctr -n=k8s.io image ls 使用ctr命令指定命名空间导入镜像

ctr -n=k8s.io image import dashboard.tar

#查看镜像,可以看到可以查询到了 crictl images 三、containerd 客户端工具 nerdctl

推荐使用 nerdctl,使用效果与 docker 命令的语法一致,github 下载链接:

https://github.com/containerd/nerdctl/releases

精简 (nerdctl–linux-amd64.tar.gz): 只包含 nerdctl

完整 (nerdctl-full–linux-amd64.tar.gz): 包含 containerd, runc, and CNI 等依赖

nerdctl 的目标并不是单纯地复制 docker 的功能,它还实现了很多 docker 不具备的功能,例如延迟拉取镜像(lazy-pulling)、镜像加密(imgcrypt)等。具体看 nerdctl。

延迟拉取镜像功能可以参考这篇文章:Containerd 使用 Stargz Snapshotter 延迟拉取镜像

https://icloudnative.io/posts/startup-containers-in-lightning-speed-with-lazy-image-distribution-on-containerd/

1)安装 nerdctl(精简版)

wget https://github.com/containerd/nerdctl/releases/download/v0.22.2/nerdctl-0.22.2-linux-amd64.tar.gz

解压

tar -xf nerdctl-0.22.2-linux-amd64.tar.gz

ln -s /opt/k8s/nerdctl/nerdctl /usr/local/bin/nerdctl 2)安装 nerdctl(完整版,这里不装)

wget https://github.com/containerd/nerdctl/releases/download/v0.22.2/nerdctl-full-0.22.2-linux-amd64.tar.gz tar -xf nerdctl-full-0.16.0-linux-amd64.tar.gz -C /usr/local/

cp /usr/local/lib/systemd/system/*.service /etc/systemd/system/ 启动服务 buildkit

systemctl enable buildkit containerd --now systemctl status buildkit containerd 3)安装 buildkit 支持构建镜像

buildkit GitHub 地址:

https://github.com/moby/buildkit 使用精简版 nerdctl 无法直接通过 containerd 构建镜像,需要与 buildkit 组全使用以实现镜像构建。当然你也可以安装上面的完整 nerdctl;buildkit 项目是 Docker 公司开源出来的一个构建工具包,支持 OCI 标准的镜像构建。它主要包含以下部分:

服务端 buildkitd,当前支持 runc 和 containerd 作为 worker,默认是 runc;

客户端 buildctl,负责解析 Dockerfile,并向服务端 buildkitd 发出构建请求。

buildkit 是典型的C/S 架构,client 和 server 可以不在一台服务器上。而 nerdctl 在构建镜像方面也可以作为 buildkitd 的客户端。

https://github.com/moby/buildkit/releases

wget https://github.com/moby/buildkit/releases/download/v0.10.4/buildkit-v0.10.4.linux-amd64.tar.gz

tar -xf buildkit-v0.10.4.linux-amd64.tar.gz -C /usr/local/ 配置 buildkit 的启动文件,可以从这里下载:

https://github.com/moby/buildkit/tree/master/examples/systemd

buildkit 需要配置两个文件

/usr/lib/systemd/system/buildkit.socket

cat > /usr/lib/systemd/system/buildkit.socket



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有